/*	
 *				
 *					ISNW ---- It is a war.It is not warcraft!
 *
 *
 *					Author:					zhoukeli(haxixi_keli)
 *					Filename:				ICameraSceneNode.h
 *					CreateTime:				2008/12/27
 *					ModifyTime:				2008/12/27
 *
 */

#ifndef __ISNW_I_CAMERA_SCENE_NODE_H__
#define __ISNW_I_CAMERA_SCENE_NODE_H__

#include "ISceneNode.h"
#include "ISceneManager.h"
#include "matrix4.h"
#include "vector3d.h"
#include "Frustum.h"

namespace ISNW
{
namespace scene
{
	class ISceneManager;

	class ICameraSceneNode : public ISceneNode
	{
	public:
		ICameraSceneNode(ISceneManager* sm,ISceneNode* parent,s32 id,core::vector3df pos,core::vector3df target,core::vector3df up)
			:ISceneNode(sm,parent,id,true,pos){}
	public:
		virtual void setProjectiveMatirx(core::matrix4f projMatrix) = 0;

		virtual core::matrix4f getProjectiveMatrix() const = 0;

		virtual void setViewMatrix(core::matrix4f viewMatrix) = 0;

		virtual core::matrix4f getViewMatrix() const = 0;

		virtual void setTarget(core::vector3df target) = 0;
		
		virtual core::vector3df getTarget() const = 0;

		virtual void setFov(f32 angle) = 0;

		virtual f32 getFov() const = 0;

		virtual void setUpVec(core::vector3df upVec) = 0;

		virtual core::vector3df getUpVec() const = 0;

		virtual void setNear(f32 n) = 0;

		virtual f32 getNear() const = 0;

		virtual void setFar(f32 f) = 0;

		virtual f32 getFar() const = 0;

		virtual void setAspectRadio(f32 aspect) = 0;

		virtual f32 getAspectRadio() const = 0;

		virtual const Frustum& getFrustum() const = 0;

		virtual void setAll(f32 fov,f32 aspect,f32 n,f32 f) = 0;
	};
} // end namespace scene
} // end namespace ISNW
#endif